//js 工具类
(function($) {
    $.fn.exist = function(){ 
        if($(this).length>=1){
            return true;
        }
        return false;
    };
})(jQuery);

function reload() {
	window.location.reload();
}
function jqAjax(config) {
	var url = config.url;
	var data = config.data;
	$.ajax({
        url: url,
        data: data,
        type: 'post',
        cache: false,
        dataType: 'json',
        success: function(data){
    	    if(config.callback) {
    			config.callback(data);
    	    }
        },
        error: function(data) {
        }
    })
}

/****时间控件*****https://github.com/smalot/bootstrap-datetimepicker*****************/

   /***
    * dateId: 时间控件 id
    * options: 配置参数
    * 
    ***/
function initTimeByOption(dateId,options){
	$("."+dateId).datetimepicker('remove');
	$("."+dateId).datetimepicker(options);
	$("."+dateId).datetimepicker('update', options.initialDate);
}
/****    粒度： 天**********************/	

/***
* dateId: 时间控件 id
* offset: 偏移量（如：当前系统时间前1天   offset=-1）
* p_date：【可选】
***/
function initTime(dateId,offset,p_date){
	var now = new Date();
	var dateVal = getDate(offset,p_date);  
	var options={
	    language:'zh-CN',
	    pickerPosition:'bottom-left',
	  	endDate:now,//设置结束时间参数：接受 Date 类型值，结束时间后面的日期将被设置为 disabled。
	  	todayBtn:true,//是否显示按钮 Today ，点击 Today 会跳转到今日的时间，默认为 false
	  	todayHighlight:true,//是否高亮当日的日期，默认为 false。
	  	autoclose:true,//设置时间后自动关闭时间选择器面板，参数类型：Boolean 默认值为：false 不关闭
	  	minView:2,//最小视图模式 可以接受 Number | String 类型------ [0 或者 hour: 显示分（默认）][1 或者 days: 显示小时][2 或者 month: 显示天]
	  	initialDate:dateVal//设置时间选择器初始化的时间值，默认情况下是现在，你可以指定其他时间，initialDate 接受 Date | String， 默认值为: new Date()。
	};
	  
	initTimeByOption(dateId,options);
	  
}


function getDate(offset,p_date){
	var _offset = 0;
    var date;
	if(offset != undefined){
		_offset =eval(offset);
	}
	
	if(p_date!=undefined){
	  date = new Date(p_date);
	}
	else{
	  date = new Date();
	}
	date.setDate(date.getDate()+_offset);
	return date;
}

function getDateVal(offset,p_date){
    var date=getDate(offset,p_date);
	var dateVal = formatDate(date);
	return dateVal;
}

function formatDate(d) {
    month = '' + (d.getMonth() + 1),
    day = '' + d.getDate(),
    year = d.getFullYear();

    if (month.length < 2) month = '0' + month;
    if (day.length < 2) day = '0' + day;

    return [year, month, day].join('-');
}
/****    粒度： 月**********************/	
function getMonth(offset,p_date){
    var _offset = 0;
    var date;
	if(offset != undefined){
		_offset =eval(offset);
	}
	
	if(p_date!=undefined){
	  date = new Date(p_date);
	}
	else{
	  date = new Date();
	}
	date.setMonth(date.getMonth()+_offset);
	return date;
}
	
function getMonthVal(offset,p_date){
    var date=getMonth(offset,p_date);
	var dateVal = formatMonth(date);
	return dateVal;
}
function formatMonth(d) {
    month = '' + (d.getMonth() + 1),
    year = d.getFullYear();

if (month.length < 2) month = '0' + month;

return [year, month].join('-');
}


function initTimeMonth(dateId,offset,p_date){
  var dateVal = getMonth(offset,p_date);
  
  var options={
  	format:'yyyy-mm',
    pickerPosition:'bottom-left',
    multidate:true,
    language:'zh-CN',
  	todayHighlight:true,//是否高亮当日的日期，默认为 false。
    startView:3,
  	autoclose:true,//设置时间后自动关闭时间选择器面板，参数类型：Boolean 默认值为：false 不关闭
  	minView:3,//最小视图模式 可以接受 Number | String 类型------ [0 或者 hour: 显示分（默认）][1 或者 days: 显示小时][2 或者 month: 显示天]
  	initialDate:dateVal//设置时间选择器初始化的时间值，默认情况下是现在，你可以指定其他时间，initialDate 接受 Date | String， 默认值为: new Date()。
  };
  
  initTimeByOption(dateId,options);
}
/****    粒度： 年**********************/
function getYear(offset,p_date){
    var _offset = 0;
    var date;
	if(offset != undefined){
		_offset =eval(offset);
	}
	
	if(p_date!=undefined){
	  date = new Date(p_date);
	}
	else{
	  date = new Date();
	}
	date.setFullYear(date.getFullYear()+_offset);
	return date;
}

function initTimeYear(dateId,offset,p_date){
  var dateVal = getYear(offset,p_date);
  
  var options={
  	format:'yyyy',
    pickerPosition:'bottom-left',
    multidate:true,
    language:'zh-CN',
  	todayHighlight:true,//是否高亮当日的日期，默认为 false。
    startView:4,
  	autoclose:true,//设置时间后自动关闭时间选择器面板，参数类型：Boolean 默认值为：false 不关闭
  	minView:4,//最小视图模式 可以接受 Number | String 类型------ [0 或者 hour: 显示分（默认）][1 或者 days: 显示小时][2 或者 month: 显示天]
  	initialDate:dateVal//设置时间选择器初始化的时间值，默认情况下是现在，你可以指定其他时间，initialDate 接受 Date | String， 默认值为: new Date()。
  };
  
  initTimeByOption(dateId,options);
}





/**
 * 初始化日期约束
 * startId 开始时间控件
 * endId 结束时间控件
 * distance 开始时间和结束时间相差天数【时间跨度】
 */
		
function initDateConstraint(startId,endId,distance) {
    var _distance = -1;//等于-1 表示不限制时间跨度
	if(distance != undefined){
		_distance =eval(distance);
	}

	var v_startDate = new Date($("#"+startId).val());
    var v_endDate = new Date($("#"+endId).val());
	$("."+startId).datetimepicker().on('changeDate', function(ev){
	   var dateVal;
       if (ev.date.valueOf() > v_endDate.valueOf()){//开始日期大于结束日期
  			warning(startId,"开始日期应小于结束日期！");
	        dateVal = getDateVal(0,v_endDate);
	        v_startDate=v_endDate;
       } else {
           var days=DateDiff(ev.date,v_endDate);
              if((_distance != -1)&&(days > _distance)){//开始日期与结束日期超出范围
	   		     warning(startId,"只可以查询"+_distance+"天的数据！");
	   		     dateVal = getDateVal(-_distance,v_endDate);
	             v_startDate = getDate(-_distance,v_endDate);
	          }  
              else{
              	dateVal = getDateVal(0,ev.date);
	        	v_startDate=ev.date;
              }
	    }
	     $("."+startId).datetimepicker('update', dateVal);
    });
	
	$("."+endId).datetimepicker().on('changeDate', function(ev){
	    var dateVal;
       if (ev.date.valueOf() < v_startDate.valueOf()){
    	   dateVal = getDateVal(0,v_startDate);
    	   v_endDate = v_startDate;
    	   warning(endId,"结束日期应大于开始日期！");
       }
       else {
            var days=DateDiff(ev.date,v_startDate);
            if((_distance != -1)&&(days > _distance)){//开始日期与结束日期超出范围
	   		     warning(endId,"只可以查询"+_distance+"天的数据！");
	   		     dateVal = getDateVal(_distance,v_startDate);
	             v_endDate = getDate(_distance,v_startDate);
	        }else{
            	dateVal = getDateVal(0,ev.date);
	        	v_endDate = ev.date;
            }
	   }
       $("."+endId).datetimepicker('update', dateVal);
    });
}


/**
* 日期相差天数  ，绝对值
*
*/
function DateDiff(startdate,enddate){
	var iDays;
	if ((startdate instanceof Date)&&(enddate instanceof Date)) {
		iDays = parseInt(Math.abs(startdate - enddate ) / 1000 / 60 / 60 /24)//把相差的毫秒数转换为天数 		
   }else{
	   var aDate, oDate1, oDate2;
	   aDate = startdate.split("-");
	   oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);  //转换为yyyy-MM-dd格式
	   aDate = enddate.split("-");
	   oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);
	   iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24); 
   }
 
   return iDays ;
}
